package com.seal.comm.utils;
import java.util.Map;

/** 
 * @author meng.xf
 */
@SuppressWarnings({"unchecked","unused"})
public class Page {
	private Integer currentPage = 1;// 当前页

	private Integer pageSize = 10;// 每页显示的条数

	private Integer totalNumber;// 总条数

	private Integer totalPage;// 总页数

	private Integer firstResult;	//hibernate查询时的setFristResult()的参数,代表从第几条纪录开始
	
	private String path;			// 访问路径

	public Page() {
	}

	public Integer getCurrentPage() {
		return currentPage;
	}

	public void setCurrentPage(Integer currentPage) {
		this.currentPage = currentPage;
	}

	public Integer getPageSize() {
		return pageSize;
	}

	/**
	 * 已经根据总条数计算了总页数
	 * @param pageSize
	 */
	public void setPageSize(Integer pageSize) {
		// 根据每页的大小判断总页数
		if (totalNumber != null) {
			if (totalNumber % pageSize == 0)
				totalPage = totalNumber / pageSize;
			else
				totalPage = totalNumber / pageSize + 1;
		}
		this.pageSize = pageSize;
	}

	public Integer getTotalNumber() {
		return totalNumber;
	}

	/**
	 * 设置总条数、（已经根据pageSize判断了总页数）
	 * @param totalNumber
	 */
	public void setTotalNumber(Integer totalNumber) {
		// 根据总条数判断总页数
		if (totalNumber % pageSize == 0)
			totalPage = totalNumber / pageSize;
		else
			totalPage = totalNumber / pageSize + 1;
		this.totalNumber = totalNumber;
	}

	public Integer getTotalPage() {
		return totalPage;
	}

	public void setTotalPage(Integer totalPage) {		
		this.totalPage = totalPage;
	}

	/**
	 * 根据当前页、得到hibernate所用到的FirstResult
	 * @return 开始的条数
	 */
	public Integer getFirstResult() {
		return (this.getCurrentPage() - 1) * pageSize;
	}

	public void setFirstResult(Integer firstResult) {
		this.firstResult = firstResult;
	}
	/**
	 * 允许分页,该方法需放在q.list()之后,在页面上用<s:property value="#request.allowpage" escape="false"/>取出分页片段
	 * @param request 请求对象
	 * @param path 
	 */
	public void allowPage(Map request,String path) {
		if(this.getTotalNumber() == null)
			this.setTotalNumber(0);
		int location=path.indexOf('?');
		String param="";
		if(location>0)
		{
			param=path.substring(location+1, path.length());
			path=path.substring(0, location);
			this.path = path;
		}
		StringBuffer bf = new StringBuffer();
		bf.append("<s:form name='formpage1' action='");
		bf.append(this.path);
		if(location>0)
		{
			bf.append("?");
			bf.append(param);
		}
		bf.append("' method='POST'><table width='100%' border='0' align='center' cellpadding='2' cellspacing='1' class='tb_datalist' id='allowpage'><tr class='tr_pagenumber'><td align='right'><div>共");
		bf.append(this.getTotalNumber());
		bf.append("条记录 每页<input type='text' size='2' name='pageObj.pageSize' value='");
		bf.append(this.getPageSize());
		bf.append("'onkeyup='if(isNaN(this.value) || this.value<1){this.value=10;}' />条 第");
		bf.append(this.getCurrentPage());
		bf.append("页/共");
		bf.append(this.getTotalPage());
		bf.append("页 ");
		if(this.getCurrentPage()<=1)
		{
			bf.append("第一页 上一页 ");
		}else
		{
			bf.append("<a href='#' onclick='javascript:formpage.action=");
			bf.append('"');
			bf.append(path);
			bf.append("?page=1");
			if(location>0)
			{
				bf.append("&");
				bf.append(param);
			}
			bf.append('"');
			bf.append(";formpage.submit();'>第一页</a><a href='#' onclick='javascript:formpage.action=");
			bf.append('"');
			bf.append(path);
			bf.append("?page=");
			bf.append(this.getCurrentPage()-1);
			if(location>0)
			{
				bf.append("&");
				bf.append(param);
			}
			bf.append('"');
			bf.append(";formpage.submit();'>上一页</a> ");
		}

		if(this.getTotalPage() == null)
			this.setTotalPage(0);
		if(this.getCurrentPage()>=this.getTotalPage())
		{
			bf.append("下一页 最后一页 ");
		}else
		{
			bf.append("<a href='#' onclick='javascript:formpage.action=");
			bf.append('"');
			bf.append(path);
			bf.append("?page=");
			bf.append(this.getCurrentPage()+1);
			if(location>0)
			{
				bf.append("&");
				bf.append(param);
			}
			bf.append('"');
			bf.append(";formpage.submit();'>下一页</a><a href='#' onclick='javascript:formpage.action=");
			bf.append('"');
			bf.append(path);
			bf.append("?page=");
			bf.append(this.getTotalPage());
			if(location>0)
			{
				bf.append("&");
				bf.append(param);
			}
			bf.append('"');
			bf.append(";formpage.submit();'>最后一页</a>");
		}
		bf.append("转到<input size='2' type='text' name='pageObj.currentPage' value='");
		bf.append(this.getCurrentPage());
		bf.append("' onkeyup='if(isNaN(this.value) || this.value<1){this.value=1;}if(this.value>"+this.getTotalPage()+"){this.value="+this.getTotalPage()+";}'/> <input type='submit' value='GO' /></div></td></tr></table></s:form>");
		request.put("allowpage", bf.toString());
	}

	public String getPath() {
		return path;
	}

	public void setPath(String path) {
		this.path = path;
	}	
}
